import "@site/src/languages/highlight";

# 编写游戏角色属性定义模块

&emsp;&emsp;欢迎来到Dora SSR游戏引擎横版2D游戏开发教程的第六篇！在这篇教程中，我们将介绍如何定义游戏角色的属性。这个模块主要做两件事：使用一个字典容器存储各种游戏角色的属性数据，然后将这个字典对象保存到Platformer.Data.store的全局接口中，供其他模块访问和使用。

&emsp;&emsp;首先，我们需要引入一些必要的模块：

```tl title="Script/Unit.tl"
local Dictionary <const> = require("Dictionary")
local Vec2 <const> = require("Vec2")
local Size <const> = require("Size")
local Array <const> = require("Array")
local Platformer <const> = require("Platformer")
```

&emsp;&emsp;接着，我们创建了一个[Dictionary](/docs/api/Class/Dictionary)对象，并设置了各种游戏角色的属性：

```tl title="Script/Unit.tl"
local unitDef = Dictionary()
unitDef.linearAcceleration = Vec2(0, -15)
unitDef.bodyType = "Dynamic"
unitDef.scale = 1.0
unitDef.density = 1.0
unitDef.friction = 1.0
unitDef.restitution = 0.0
unitDef.playable = "spine:Spine/moling"
unitDef.defaultFaceRight = true
unitDef.size = Size(60, 300)
unitDef.sensity = 0
unitDef.move = 300
unitDef.jump = 1000
unitDef.detectDistance = 350
unitDef.hp = 5.0
unitDef.tag = "player"
unitDef.decisionTree = "AI:playerControl"
unitDef.usePreciseHit = false
unitDef.actions = Array {
	"idle",
	"turn",
	"move",
	"jump",
	"fallOff",
	"cancel"
}
```

&emsp;&emsp;在上述代码中，我们定义了游戏角色的各种属性，包括受到线性加速度（重力）、物理体类型、缩放比例、密度、摩擦力、弹性系数、动画模型、默认面向右边、大小、反应时间系数、移动速度、跳跃力、检测距离、生命值、标签、决策树、是否使用精确击中以及动作列表等，均为常见的横版游戏角色的基础属性，但是在本教程的游戏示例中实际只用到其中一小部分定义的数据。你也可以尝试定义其它新的属性定义然后在其它自定义的处理逻辑中访问和使用。

&emsp;&emsp;最后，我们将这个字典对象保存到[Platformer.Data.store](/docs/api/Class/Platformer/Data#store)中，这样其他模块就可以访问这个对象了：

```tl title="Script/Unit.tl"
Platformer.Data.store["Unit:player"] = unitDef
```

&emsp;&emsp;至此，我们的游戏角色属性定义模块就编写完成了。在接下来的教程中，我们将使用这些定义的属性来创建游戏角色和实现游戏逻辑。希望你能跟上我们的步伐，一起学习Dora SSR游戏引擎的使用方法！